package net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * UDP网络通信编程-接收端
 */
public class UDPReceiverA {

    public static void main(String[] args) throws Exception {

        /*
            1.编写一个接收端A，一个发送端B
            2.接收端A在9999端口等待接收数据(receive)
            3.发送端B向接收端A发送数据 "hello,明天吃火锅~"
            4.接收端A接收到发送端B发送的数据，回复"好的，明天见"，再退出
            5.发送端接收回复的数据，再退出
         */

        //1.创建一个 DatagramSocket对象，准备接收数据
        DatagramSocket socket = new DatagramSocket(9999);

        //2.构建一个DatagramPacket对象，准备接收数据
        //  一个数据包最大是64K
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        //3.调用接收方法将通过网络传输的 DatagramPacket对象
        //  填充到 packet对象
        //当有数据包发送到本机9999端口时，就会接收到数据
        //如果没有数据包发送到9999端口时，就会阻塞等待
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);

        //4.把packet进行拆包
        int length = packet.getLength();    //实际接收的数据的字节长度
        byte[] data = packet.getData();

        String message = new String(data, 0, length);
        System.out.println(message);

        //5.回复消息给B端
        data = "好的 明天见".getBytes();
        //封装的 DatagramPacket(data, length, host, port)
        packet =
                new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 9998);
        socket.send(packet);


        //5.关闭资源
        socket.close();
        System.out.println("A端退出...");

    }
}
